/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.modelo.beans;

import com.ipartek.formacion.gestformwww.controlador.Verificador;
import java.util.ResourceBundle;

/**
 * 
 * @author Cristina & Fran
 */
public class FiltroMaterial {

    private ResourceBundle bundle;
    private int libId;
    private String ISBN;
    private String libAutor;
    private String libEditorial;
    private int libAnnio;
    private int libPag;
    private int libPVP;
    private String libTitulo;
    private String libObserv;
    private String pedId;
    private int libCantidadDoc;
    private int libCantidadAlu;
    private String columnafiltrar;
    private String orden;
    private int pagsiguiente;
    private int elementospag;
    private int curId;

    public FiltroMaterial(ResourceBundle bundle, int libId, String ISBN, String libAutor, String libEditorial, int libAnnio, int libPag, int libPVP, String libTitulo, String libObserv, String pedId, int libCantidadDoc, int libCantidadAlu, String columnafiltrar, String orden, int pagsiguiente, int elementospag, int curId) {
        this.bundle = bundle;
        this.libId = libId;
        this.ISBN = ISBN;
        this.libAutor = libAutor;
        this.libEditorial = libEditorial;
        this.libAnnio = libAnnio;
        this.libPag = libPag;
        this.libPVP = libPVP;
        this.libTitulo = libTitulo;
        this.libObserv = libObserv;
        this.pedId = pedId;
        this.libCantidadDoc = libCantidadDoc;
        this.libCantidadAlu = libCantidadAlu;
        this.columnafiltrar = columnafiltrar;
        this.orden = orden;
        this.pagsiguiente = pagsiguiente;
        this.elementospag = elementospag;
        this.curId = curId;
    }

    public String getISBN() {
        return ISBN;
    }

    public void setISBN(String ISBN) {
        this.ISBN = ISBN;
    }

    public int getLibAnnio() {
        return libAnnio;
    }

    public void setLibAnnio(int libAnnio) {
        this.libAnnio = libAnnio;
    }

    public String getLibAutor() {
        return libAutor;
    }

    public void setLibAutor(String libAutor) {
        this.libAutor = libAutor;
    }

    public int getLibCantidadAlu() {
        return libCantidadAlu;
    }

    public void setLibCantidadAlu(int libCantidadAlu) {
        this.libCantidadAlu = libCantidadAlu;
    }

    public int getLibCantidadDoc() {
        return libCantidadDoc;
    }

    public void setLibCantidadDoc(int libCantidadDoc) {
        this.libCantidadDoc = libCantidadDoc;
    }

    public String getLibEditorial() {
        return libEditorial;
    }

    public void setLibEditorial(String libEditorial) {
        this.libEditorial = libEditorial;
    }

    public int getLibId() {
        return libId;
    }

    public void setLibId(int libId) {
        this.libId = libId;
    }

    public String getLibObserv() {
        return libObserv;
    }

    public void setLibObserv(String libObserv) {
        this.libObserv = libObserv;
    }

    public int getLibPVP() {
        return libPVP;
    }

    public void setLibPVP(int libPVP) {
        this.libPVP = libPVP;
    }

    public int getLibPag() {
        return libPag;
    }

    public void setLibPag(int libPag) {
        this.libPag = libPag;
    }

    public String getLibTitulo() {
        return libTitulo;
    }

    public void setLibTitulo(String libTitulo) {
        this.libTitulo = libTitulo;
    }

    public String getPedId() {
        return pedId;
    }

    public void setPedId(String pedId) {
        this.pedId = pedId;
    }

      
    public int getElementospag() {
        return elementospag;
    }

    public void setElementospag(int elementospag) {
        this.elementospag = elementospag;
    }

    public int getPagsiguiente() {
        return pagsiguiente;
    }

    public void setPagsiguiente(int pagsiguiente) {
        this.pagsiguiente = pagsiguiente;
    }
    public int getcurId() {
        return curId;
    }

    public void setcurId(int curId) {
        this.curId = curId;
    }

    /**
     * Devuelve el primer elemento para la paginacion.
     * @return int
     */
    public int getPrimerElemento (){
        int primerelemento = (this.getPagsiguiente() - 1) * this.getElementospag() + 1;
        return primerelemento;
    }
    /**
     * Obtiene el último elemento para la paginación.
     * @return int
     */
    public int getUltimoElemento (){
        int ultimoelemento = this.getPagsiguiente() * this.getElementospag();
        return ultimoelemento;
    }


    public FiltroMaterial() {
    }

    /**
     * Metodo que inicializa los campos iniciales del filtro
     * @param bundle, mapa que contiene la relacion con los distintos campos mapeados en los
     * ficheros properties.
     */
    public FiltroMaterial(ResourceBundle bundle) {
        this.pagsiguiente = 1;
        this.elementospag = Integer.parseInt(bundle.getString("numRegPagMateriales"));
        this.bundle = bundle;
    }

    public ResourceBundle getBundle() {
        return bundle;
    }

    public void setBundle(ResourceBundle bundle) {
        this.bundle = bundle;
    }

   public String getColumnafiltrar() {
        return columnafiltrar;
    }
    /**
     * Metodo set que realiza la modificacion y validacion de los datos introducidos
     * @param columnafiltrar, objeto de tipo String
     */
    public void setColumnafiltrar(String columnafiltrar) {
        if (Verificador.caracteresCorrectos(columnafiltrar)) {
            if (columnafiltrar != null) {
                this.columnafiltrar = columnafiltrar;
            }
        } else {
            this.columnafiltrar = null;
        }
    }


    /**
     * Metodo set que realiza la modificacion y validacion de los datos introducidos
     * @param elementospag, objeto de tipo String
     */
    public void setElementospag(String elementospag) {
        if (Verificador.numeroValido(elementospag)) {
            this.elementospag = Integer.parseInt(elementospag);
        }
    }

   public String getOrden() {
        return orden;
    }
    /**
     * Metodo set que realiza la modificacion y validacion de los datos introducidos
     * @param orden, objeto de tipo String
     */
    public void setOrden(String orden) {
        if (Verificador.caracteresCorrectos(orden)) {
            if (orden != null) {
                this.orden = orden;
            }
        } else {
            this.orden = null;
        }
    }

    /**
     * Metodo set que realiza la modificacion y validacion de los datos introducidos
     * @param pagsiguiente, objeto de tipo String
     */
    public void setPagsiguiente(String pagsiguiente) {
        if (Verificador.numeroValido(pagsiguiente)) {
            this.pagsiguiente = Integer.parseInt(pagsiguiente);
        } else {
            this.pagsiguiente = 1;
        }
    }

    public String getSQL() {
        String sql = "";
        String filtro = "ORDER BY libro.LibId";
        String and = "";
        String where = " WHERE ";
        if (columnafiltrar != null && !columnafiltrar.trim().equals("")) {
            String columna = bundle.getString(columnafiltrar);
            if (columna != null && !columna.trim().equals("")) {
                filtro = "ORDER BY " + columna;
                if (orden != null && !orden.trim().equals("")) {
                    if (orden.trim().equals("ASC") || orden.trim().equals("DESC")) {
                        filtro = filtro + " " + orden;
                    }
                }
            }
        }
        if (curId > 0) {
            sql = "SELECT LibId, ISBN, LibAutor, LibEditorial, LibAño, LibPag, LibPVP, LibTitulo, LibObserv, "
                    + "PedId, LibCantidadDoc, LibCantidadAlu"
                    + " FROM libro "
                    + "WHERE libro.LibId not in("
                    + "SELECT libro.LibId FROM libro INNER JOIN entrega ON libro.LibId = entrega.LibId "
                    + "WHERE entrega.CurId = " + curId +") ";

            and = " AND ";
            where = "";
        }
        else {
            sql = "SELECT LibId, ISBN, LibAutor, LibEditorial, LibAño, LibPag, LibPVP, LibTitulo, LibObserv, "
                    + "PedId, LibCantidadDoc, LibCantidadAlu"
                    + " FROM libro ";
                    
            and = " AND ";
            where = "";
        }
        

        if (   
            (ISBN != null && !ISBN.trim().equals("")) ||
            (libTitulo != null && !libTitulo.trim().equals("")) ||
            (libAutor != null && !libAutor.trim().equals("")) ||
            (libEditorial != null && !libEditorial.trim().equals("")) && (curId > 0)
           ){
            sql = sql + " where ";
            if ((ISBN != null && !ISBN.trim().equals(""))){
                sql = sql + "libro.ISBN LIKE '%" + ISBN + "%'";
                if (
                        (libTitulo != null && !libTitulo.trim().equals("")) ||
                        (libAutor != null && !libAutor.trim().equals("")) ||
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libTitulo != null && !libTitulo.trim().equals("")) {
                sql = sql + "libro.LibTitulo LIKE '%" + libTitulo + "%'";
                if (
                        (libAutor != null && !libAutor.trim().equals("")) ||
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libAutor != null && !libAutor.trim().equals("")){
                 sql = sql + "libro.LibAutor LIKE '%" + libAutor + "%'";
                if (
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libEditorial != null && !libEditorial.trim().equals("")) {
                 sql = sql + "libro.LibEditorial LIKE '%" + libEditorial + "%'";
            }

        }
        else {
            if (
            (ISBN != null && !ISBN.trim().equals("")) ||
            (libTitulo != null && !libTitulo.trim().equals("")) ||
            (libCantidadAlu > 0) ||
            (libEditorial != null && !libEditorial.trim().equals(""))
           ){
            sql = sql + " where ";
            if ((ISBN != null && !ISBN.trim().equals(""))){
                sql = sql + "libro.ISBN LIKE '%" + ISBN + "%'";
                if (
                        (libTitulo != null && !libTitulo.trim().equals("")) ||
                        (libCantidadAlu > 0) ||
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libTitulo != null && !libTitulo.trim().equals("")) {
                sql = sql + "libro.LibTitulo LIKE '%" + libTitulo + "%'";
                if (
                        (libCantidadAlu > 0) ||
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libCantidadAlu > 0){
                 sql = sql + "libro.LibAutor LIKE '%" + libCantidadAlu + "%'";
                if (
                        (libEditorial != null && !libEditorial.trim().equals(""))
                    ) {
                    sql = sql + " AND ";
                }
            }
            if (libEditorial != null && !libEditorial.trim().equals("")) {
                 sql = sql + "libro.LibEditorial LIKE '%" + libEditorial + "%'";
            }

        }
        }
        sql= sql + " " + filtro;
        return sql;
    }
}
